package br.com.salao.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.salao.bean.Estabelecimento;
import br.com.salao.bean.Login;
import br.com.salao.util.JpaUtil;

import com.sun.istack.logging.Logger;

public class EstabelecimentoDaoImpl implements EstabelecimentoDao {

	private final GenericDao<Estabelecimento> dao;

	public EstabelecimentoDaoImpl(EntityManager em){
		dao = new GenericDao<Estabelecimento>(em,Estabelecimento.class);
	}
	
	@Override
	public Estabelecimento inserir(Estabelecimento estabelecimento) {
		return dao.salvar(estabelecimento);
	}

	@Override
	public Estabelecimento update(Estabelecimento estabelecimento) {
		return dao.update(estabelecimento);
	}

	@Override
	public List<Estabelecimento> lista() {
		return dao.lista();
	}
	
	@SuppressWarnings("unchecked")
	public List<Estabelecimento> buscarEstabelecimentosPorUsuario(Login login){
		
		EntityManager em = JpaUtil.getEntityManager();

		List<Estabelecimento> estabelecimentos = null;

		try {		
			Query query = em.createQuery("from Estabelecimento e where e.usuarioResponsavel = :idUsuario");
			query.setParameter("idUsuario", login.getUsuario());
			estabelecimentos = (List<Estabelecimento>) query.getResultList();	
			
		} catch (Exception e) {
			e.printStackTrace();

		} finally{
			if(em != null){
				em.close();
			}
		}
		return estabelecimentos;
	}

	public Estabelecimento buscarEstabelecimentosPorId(int idEstabelecimento){
		
		EntityManager em = JpaUtil.getEntityManager();

		Estabelecimento estabelecimento = null;

		try {		
			Query query = em.createQuery("from Estabelecimento e where e.id like :idEstabelecimento");
			query.setParameter("idEstabelecimento", idEstabelecimento);
			estabelecimento = (Estabelecimento) query.getSingleResult();	
			
		} catch (Exception e) {
			e.printStackTrace();

		} finally{
			if(em != null){
				em.close();
			}
		}
		return estabelecimento;			
	}	
	
	@SuppressWarnings("unchecked")
	public List<Estabelecimento> buscarEstabelecimentoPorCidade(int idCidade){

		EntityManager em = JpaUtil.getEntityManager();

		List<Estabelecimento> estabelecimentos = null;
		estabelecimentos = new ArrayList<Estabelecimento>();
		
		try{
			Query query = em.createQuery("from Estabelecimento c where c.endereco.bairro.cidade.id like :idCidade");
			query.setParameter("idCidade", idCidade);
			estabelecimentos = (List<Estabelecimento>) query.getResultList();
		}catch (Exception e) {
			estabelecimentos = null;
		}finally{
			if(em != null){
				em.close();
			}
		}
		return estabelecimentos;
	}
	
	@SuppressWarnings("unchecked")
	public List<Estabelecimento> buscarEstabelecimentoPorBairro(int idBairro){

		EntityManager em =  JpaUtil.getEntityManager();

		List<Estabelecimento> estabelecimentos = null;
		try{
			Query query = em.createQuery("from Estabelecimento c where c.endereco.bairro.id like :idCidade");
			query.setParameter("idCidade", idBairro);
			estabelecimentos = (List<Estabelecimento>) query.getResultList();
		}catch (Exception e) {
			estabelecimentos = null;
		}finally{
			if(em != null){
				em.close();
			}
		}
		return estabelecimentos;
	}	
}
